package com.xujiang.common_core.util.ourexception;

/**
 * 自定义异常
 *
 * @author xujiang
 * @version 2017-06-30 15:11
 */
public class SystemException extends Exception implements ISystemException {

    private SystemExceptionHelper mExceptionHelper;  //异常帮助类，用于解析注解

    public SystemException(String errorMessage, Throwable e) {  //以下三个初始化全部调用这个类
        super(errorMessage);
        mExceptionHelper = SystemExceptionHelper.with(e);  //初始化mExceptionHelper
    }

    public SystemException(String errorMessage) {
        this(errorMessage, errorMessage);
    }

    public SystemException(String errorMessage, String myErrorMessage) {
        this(errorMessage, new SystemContentException(myErrorMessage));
    }

    public SystemException(Throwable e) {
        this(e.getMessage(), e);
    }

    /**
     * 通过 mExceptionHelper得到 Cause 及 Throwable 的原因
     * 及我们自己注解的原因
     */
    @Override
    public Throwable getCause() {
        if (mExceptionHelper == null) {
            return super.getCause();
        }
        return mExceptionHelper.getCause();
    }

    /**
     * 得到原来异常。而不是自定义的原因
     * {@link Throwable#getCause()}
     */
    public Throwable getOriginalCause() {
        return super.getCause();
    }

    /**
     * 得到helper的Throwable对象
     */
    public Throwable getThrowable() {
        return mExceptionHelper.getmThrowable();
    }

    /**
     * 设置helper的Throwable对象
     */
    public void setThrowable(Throwable throwable) {
        mExceptionHelper.setmThrowable(throwable);
    }
}
